package com.ruoyi.user.mapper;

import java.math.BigDecimal;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.order.pojo.AppConsumeDTO;
import com.ruoyi.order.pojo.AppWithdrawalDTO;
import com.ruoyi.user.domain.UserCapitalFlow;
import com.ruoyi.user.pojo.AppGiftFlow;
import com.ruoyi.user.pojo.ConsultantIncomeDTO;

/**
 * 用户资金流水Mapper接口
 * 
 * @author DEREK
 * @date 2023-05-23
 */
public interface UserCapitalFlowMapper extends BaseMapper<UserCapitalFlow>
{
    /**
     * 查询用户资金流水
     * 
     * @param id 用户资金流水主键
     * @return 用户资金流水
     */
    public UserCapitalFlow selectUserCapitalFlowById(Long id);

    /**
     * 查询用户资金流水列表
     * 
     * @param userCapitalFlow 用户资金流水
     * @return 用户资金流水集合
     */
    public List<UserCapitalFlow> selectUserCapitalFlowList(UserCapitalFlow userCapitalFlow);

    /**
     * 新增用户资金流水
     * 
     * @param userCapitalFlow 用户资金流水
     * @return 结果
     */
    public int insertUserCapitalFlow(UserCapitalFlow userCapitalFlow);

    /**
     * 修改用户资金流水
     * 
     * @param userCapitalFlow 用户资金流水
     * @return 结果
     */
    public int updateUserCapitalFlow(UserCapitalFlow userCapitalFlow);

    /**
     * 删除用户资金流水
     * 
     * @param id 用户资金流水主键
     * @return 结果
     */
    public int deleteUserCapitalFlowById(Long id);

    /**
     * 批量删除用户资金流水
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteUserCapitalFlowByIds(Long[] ids);
    
    /**
     * 	提现记录
     * @param userId
     * @param pageNo
     * @return
     */
    List<AppWithdrawalDTO> withdrawalRecord(@Param("userId")Long userId,@Param("pageNo")Integer pageNo);
    
    /**
     * 充值和VIP购买记录
     * @param userId
     * @param pageNo
     * @param type		1=充值记录 2=VIP购买记录
     * @return
     */
    IPage<AppConsumeDTO> consumeRecord(Page<AppConsumeDTO> page,@Param("userId")Long userId,@Param("type")Integer type);
    
    /**
     * 	提现审核操作
     * @param type			1=通过 2=拒绝
     * @param remark		描述
     * @param orderNo		订单号
     */
    void withdrawalHandle(@Param("type")Integer type,@Param("remark")String remark,@Param("orderNo")String orderNo,@Param("amount")BigDecimal amount);
    
    /**
     * 	礼物流水
     * @param page
     * @param userId
     * @param type
     * @return
     */
    IPage<AppGiftFlow> giftFlowList(Page<AppGiftFlow> page,@Param("userId")Long userId,@Param("type")Integer type,@Param("businessType")Integer businessType);
    
    /**
     * 	收益记录
     * @param userCapitalFlow
     * @return
     */
    List<ConsultantIncomeDTO> consultantIncomeList(ConsultantIncomeDTO consultantIncomeDTO);
}
